#include "ThreadActualizaPantalla.h"

SDL_Surface* screenActualizacion;

 struct tipoFuente{
   SDL_Surface *imagen;
   int ancho, alto;
   int anchoLetra, altoLetra;
   int primeraLetra;
 } fuente;

void leerFuente(char nombre[]) {
    fuente.imagen = SDL_LoadBMP(nombre); 
    fuente.ancho=256;
    fuente.alto=256;
    fuente.anchoLetra=16;
    fuente.altoLetra=16;
    fuente.primeraLetra=0;
  }

void escribirLetra(int x, int y, char letra) {
    SDL_Rect destino, origen; 
    int fila, columna;
    int letrasPorFila, letrasPorColumna;
    
    letrasPorFila = fuente.ancho/fuente.anchoLetra;
    letrasPorColumna = fuente.alto/fuente.altoLetra;
    fila = letra / letrasPorColumna;
    columna = letra % letrasPorColumna;
    origen.x = columna * fuente.anchoLetra;
    origen.y = fila * fuente.altoLetra;
    origen.w = 16;
    origen.h = 16;
    destino.x = x;
    destino.y = y;
    SDL_BlitSurface(fuente.imagen, &origen, screenActualizacion, &destino); 
  }

 void escribirFrase(int x, int y, char *frase) {
    int i;
    for (i=0; i<strlen(frase); i++)
      escribirLetra(x+i*fuente.anchoLetra, y, frase[i]);
  }


int thread_func_Pantalla(void *unused)
{	
	Escenario *esc=(Escenario*)unused;

    leerFuente("images/letras.bmp");
	char pts[6];
	char vida[2] ;

	SDL_Surface *screenCopia = SDL_CreateRGBSurface(NULL, esc->GetTexturaFondo()->getImagen()->w,esc->GetTexturaFondo()->getImagen()->h, 24, NULL, 
		NULL, NULL, NULL);

	SDL_Rect rect;
	rect.x = 0;
	rect.y = 0;
	SDL_Delay(100);
	
	//ultima
	
	SDL_BlitSurface(screenActualizacion, 0, screenCopia, &rect);

	Pelota* pelotaPrimaria;
	Pelota* pelotaSecundaria;
	Pelota* pelotaEnVuelo;
	Bonus* bonusActual;
	Sapo* sapito;
	vector<Pelota*> listaPelotasCarril;
	

	while ( esc->finDeJuego == 0 ) 
    {
		sprintf(pts,"%d",esc->getPuntos());
		sprintf(vida,"%d",esc->getVidas());
		//escribirFrase(19, 18,"Vida:");
		escribirFrase(93, 18,vida);
		//escribirFrase(550, 12, "Pts:");
		escribirFrase(692, 20,pts);
		//escribirFrase(160, 12,"Prox.Pelota:");

		// Cada BONUSFRENOPUNTOS retrocede BONUSRETROCESOPUNTOS 
		if (esc->getCarril()->getPuntosBonus() >= BONUSFRENOPUNTOS)
	    {
		esc->getCarril()->setPuntosBonus(esc->getCarril()->getPuntosBonus() - BONUSFRENOPUNTOS);
		esc->getCarril()->BonusRetroceso(BONUSRETROCESOPUNTOS);
	    }

		//pinto la pelota en vuelo
		pelotaEnVuelo = esc->getPelotaEnVuelo();
		if (pelotaEnVuelo!=NULL) pelotaEnVuelo->Dibujar(screenActualizacion);

		//Pinto el Bonus, si es que lo hay;
		bonusActual=esc->getBonusEnPantalla();
		if (bonusActual!=NULL){
		//	cout << "Dibujo bonus\n";
			bonusActual->Dibujar(screenActualizacion);
		}
		//Actualizo las pelotas de lcarril
		Carril* carrilcito=esc->getCarril();

		listaPelotasCarril.clear(); //clear para evitar lios de concurrencia
		listaPelotasCarril = carrilcito->GetListaDePelotas();
		vector<Pelota*>::iterator itPelotas;
		for (itPelotas=listaPelotasCarril.begin(); itPelotas!=listaPelotasCarril.end(); ++itPelotas)
			{
			Pelota* pelotaCarril=(Pelota*)(*itPelotas);
			pelotaCarril->Dibujar(screenActualizacion);
			}

		//Actualizo el giro del SAPO
		sapito=esc->getSapo();
		if (sapito!=NULL) sapito->DibujarRotaciones(screenActualizacion);

		//pinto la pelota primaria y secundaria.
		pelotaPrimaria=esc->getPelotaPrimaria();
		if (pelotaPrimaria!=NULL) pelotaPrimaria->Dibujar(screenActualizacion);
		pelotaSecundaria=esc->getPelotaSecundaria();
		if (pelotaSecundaria!=NULL)	pelotaSecundaria->Dibujar(screenActualizacion);
		
		SDL_Flip(screenActualizacion);
		SDL_BlitSurface(screenCopia, 0, screenActualizacion, &rect);
		SDL_Delay(2);
		
	}
   // printf("Saliendo del hilo\n");
    return(0);
}

ThreadActualizaPantalla::ThreadActualizaPantalla(SDL_Surface *screenPrincipal,Escenario *esc)
{
	screenActualizacion=screenPrincipal;
	
	//Inicio el Hilo
	SDL_Thread *thread;
	int a = 0;
   	thread = SDL_CreateThread(thread_func_Pantalla, esc);

    if ( thread == NULL ) 
    {
        fprintf(stderr, "No se puede crear el hilo de Movimiento: %s\n",
	        SDL_GetError());
        return;
    }
}
